package com.sxt.utils;


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.InetAddress;
import java.net.UnknownHostException;

import javax.servlet.http.HttpServletRequest;

/**
 * HttpServletRequest 来自servlet-api 里面的
 * 
 * @author WHSXT-LTD
 *
 */
public class IpUtils {
	/** 
	 * 获取当前网络ip 
	 * 就是nginx 里面的2 个头
	 * 
	 * 1 x-forwarded-for 
	 * 2 x-real-ip = Proxy-Client-IP
	 * @param request 
	 * @return 
	 */  
	public static String getIpAddr(HttpServletRequest request){  
		String ipAddress = request.getHeader("x-forwarded-for");  
		if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
			ipAddress = request.getHeader("Proxy-Client-IP");  
		}  
		if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
			ipAddress = request.getHeader("WL-Proxy-Client-IP");  
		}  
		if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
			ipAddress = request.getRemoteAddr();  
			if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){  
				//根据网卡取本机配置的IP  
				InetAddress inet=null;  
				try {  
					inet = InetAddress.getLocalHost();  
				} catch (UnknownHostException e) {  
					e.printStackTrace();  
				}  
				ipAddress= inet.getHostAddress();  
			}  
		}  
		//对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割  
		if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15  
			if(ipAddress.indexOf(",")>0){  
				ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));  
			}  
		}  
		return ipAddress;   
	}

	/**
	 * 获得MAC地址
	 * @param ip
	 * @return
	 */
	public static String getMACAddress(String ip){ 
		String str = ""; 
		String macAddress = ""; 
		try { 
			Process p = Runtime.getRuntime().exec("nbtstat -A " + ip); 
			InputStreamReader ir = new InputStreamReader(p.getInputStream()); 
			LineNumberReader input = new LineNumberReader(ir); 
			for (int i = 1; i < 100; i++) { 
				str = input.readLine(); 
				if (str != null) { 
					if (str.indexOf("MAC Address") > 1) { 
						macAddress = str.substring(str.indexOf("MAC Address") + 14, str.length()); 
						break; 
					} 
				} 
			} 
		} catch (IOException e) { 
			e.printStackTrace(System.out); 
		} 
		return macAddress; 
	}

}